The concept of RAID (“Redundant Arrays of Inexpensive Disks,” now commonly referred to in the literature as “Redundant Arrays of Independent Disks”) was introduced in PATTERSON, David. A Case for Redundant Arrays of Inexpensive Disks (RAID). Proc. ACM SIGMOD Conference, 1988 p. 109-116. The basic concept of RAID was to replace a “Single Large Expensive Disk” (SLED), such as was commonly used in mainframe computers, with an array of smaller, lower-end “inexpensive disks,” such as are used in personal computers, in order to increase performance while keeping costs down. Whereas a SLED might be capable of accessing one sector at a time, a RAID would utilize multiple disks operating in parallel to increase overall throughput by accessing multiple sectors at one time on different disks. RAID arrays and other similar storage systems (such as RAIT—Redundant Arrays of Independent Tapes) have become a very popular and economical way to store large amounts of data in a fault-tolerant manner. RAID arrays typically employ some form of error detection or error correction scheme, such as Hamming codes, parity bits, or Reed-Solomon codes, to provide some measure of fault-tolerance, or at least fault-detection.
There are a number of different configurations of RAID arrays that are known to those skilled in the art. Most commonly, these different configurations are referred to as “RAID Levels,” following the nomenclature introduced in the original Patterson paper. The different RAID levels utilize different schemes to improve the performance and reliability of the array. In a typical RAID array, which comprises inexpensive “stock” disk drives, the particular scheme employed is defined by software associated with a controller card, a host computer system, or both. In some RAID products, the user may choose from among a number of different optional configurations or features when setting up a RAID array.
It is not uncommon for software or hardware manufacturers to offer multiple versions of a single product, where the different versions offering different sets of features. For example, a word processing program may have a “standard” edition intended for home users, and a “professional” edition having additional features intended for use in a business/professional setting, such as a law office. Oftentimes a user of a product is provided the option of upgrading from one version of the software to another. In the case of a RAID array, it is also desirable for a manufacturer to be able to offer different versions of the same product, with feature sets and corresponding price ranges tailored to particular end-users.
From a technical standpoint, however, offering multiple versions of a product such as a RAID system is more complex than is the case with a simple software application. This is because a RAID system comprises both a piece of hardware and the software (including device drivers) for controlling/accessing the RAID array. It is inconvenient and uneconomical for a user to have to update/re-install both a piece of hardware and a piece of software in order to update the user's system. Moreover, it is difficult and expensive for a manufacturer to have to produce completely different versions of a product.
A more economical approach to providing multiple levels of functionality is to produce a single version of the product containing all of the features, then provide some mechanism for authorizing the user to only use certain permitted functions, such as a license file or code, which a user must have to enable certain features. This sort of scheme is often employed in software. There is a drawback to this method, however, and it is that one must have strict control over the distribution of the software and must find some way to prevent copying of the software by users in order to prevent piracy, such a requiring users to register the software with the manufacturer. These are expensive options for a manufacturer.
Moreover, in the case of device driver software, such as would be used with a RAID array, such strict control may be undesirable for additional reasons. It is a common practice among hardware vendors to release maintenance updates to device drivers over the Internet or to at least place copies of the device driver software on the Internet to allow hardware owners who may have lost their device driver software to make use of their hardware. If strict controls over the distribution of device driver software must be made, however, then the convenience of having a freely distributable device driver is lost.
Thus, it would be desirable to provide a manner of distributing a combined hardware/software product having variable feature sets, where piracy is prevented and the ability to freely distribute device driver code is maintained. The present invention provides a solution to this and other problems, and offers other advantages over previous solutions.